package com.hspedu.reflection.calss;

import com.hspedu.Car;

/**
 * 演示得到Class对象的各种方式
 */
public class GetClass {
    public static void main(String[] args) throws ClassNotFoundException {
        //1、 Class.forName
        String classFullPath = "com.hspedu.Car"; //通过读取配置文件获取
        Class<?> cls1 = Class.forName(classFullPath);
        System.out.println(cls1);

        //2、 类名.class   应用场景：用于参数传递
        Class cls2 = Car.class;
        System.out.println(cls2);

        //3、 对象.getClass();  应用场景：有对象实例
        Car car = new Car();
        Class cls3 = car.getClass();
        System.out.println(cls3);

        //4、 通过类加载器获取类的Class对象
        //(1)先得到类加载器 Car
        ClassLoader classLoader = car.getClass().getClassLoader();
        //(2)通过类加载器得到Class对象
        Class cls4 = classLoader.loadClass(classFullPath);
        System.out.println(cls4);

        //cls1 , cls2 , cls3 , cls4  同一个对象
        //5、基本数据得到Class类对象
        Class<Integer> integerClass = int.class;
        Class<Boolean> booleanClass = boolean.class;
        System.out.println(integerClass);

        //6、基本数据类型对应的包装类，可以通过 .TYPE 得到 Class类对象
        Class<Integer> type1 = Integer.TYPE;
        System.out.println(type1);
        Class<Character> type2 = Character.TYPE;
        System.out.println(type2);

        System.out.println("===============");
        System.out.println(integerClass.hashCode());
        System.out.println(type1.hashCode());

    }
}
